#include <sys/types.h> //系统调用
#include <unistd.h> //进程相关
#include<stdio.h>
#include <sys/wait.h>
#include <stdlib.h>   //exit函数

int main()
{
    // 未进行配置的默认配置：0-32767  15次方-1
    // 64位系统理论范围是0-2^31-1 即int的范围
    //进程号的数据类型：
    
    // pid_t pid = getpid();
    // printf("pid=%d\n",pid);
    // printf("pid=%d\n",getppid());

    // 进程的创建函数
    pid_t pid = fork();
    
    if(pid == -1)
    {
        printf("进程创建失败!\n");
        return 0;
    }
    
    if(pid == 0)//子进程
    {
        sleep(2);//将进程 挂起 ：让出cpu，进程进行等待多少秒
       
        printf("子进程pid = %d\n",getpid());
        printf("ppid = %d\n",getppid());
        // return 125;

        // 进程的退出
        // exit(128);
        _exit(128);
    }
    else
    {
        printf("父进程pid = %d\n",getpid());
        printf("收到的子进程 = %d\n",pid); 

        // 进程的等待
        // 等待子进程结束，在这之前会一直阻塞
        int status = 0;
        // wait(&status);  waitpid(-1,&status,0);这两个写法一样
        // WNOHANG 0是阻塞  1是非阻塞
        waitpid(pid,&status,0);
        //状态值存在 高 8 位
        printf("子进程退出状态 = %d\n",WEXITSTATUS(status)); 
    }

    return 0;
}


